package genericdemo;

//规定
//泛型当中 不能实例化一个泛型类数组
//泛型是将类型参数化
//数据类型参数化，编译时自动进行类型转换

//1.存储数据的时候可以帮我们进行自动的类型检查
//2.获取元素的时候，可以帮我们进行类型转换
//以上两点是在编译的时候，证明泛型是一个编译机制


//
class MyArray<T> {//代表当前类是一个泛型
    //public T[] obj = new T[3];

    //正确写法  看懂！！！
    /*public Object[] obj = new Object[3];
    public T getpose2(int pos) {
        return (T)obj[pos];
    }*/
    public T[] obj = (T[])new Object[3];

    public T getPos(int pos) {
        return obj[pos];
    }

    public void setObj(int pos,T val) {
        obj[pos] = val;
    }
}



public class Test {
    public static void main(String[] args) {
        //实例化对象的同时 指定当前泛型类 的指定参数类型是Integer
        MyArray<Integer> myArray = new MyArray<Integer>();
        //可以存储 指定的数据类型
        //指定的数据类型必须是引用类型
        myArray.setObj(0,10);
        myArray.setObj(1,44);

        Integer d = myArray.getPos(2);

        Object d2 = myArray.getPos(2);




        System.out.println("++++++=======");
        //指定字符类型
        MyArray<String> myArray2 = new MyArray<>();
        myArray2.setObj(0,"asd");
        myArray2.setObj(1,"zxc");

        String str = myArray2.getPos(0);

        //double d1 = (double) myArray.getPos(2);

    }
}
